package utils

import "net"

// IsInternalIP 判断是否为内网IP
// 内网IP范围：
// A类: 10.0.0.0--10.255.255.255
// B类: 172.16.0.0--172.31.255.255
// C类: 192.168.0.0--192.168.255.255
func IsInternalIP(ipAddress string) bool {
	ip := net.ParseIP(ipAddress)
	if ip.IsLoopback() {
		return false
	}
	// IPv4
	if ip4 := ip.To4(); ip4 != nil {
		// A类内网
		if ip4[0] == 10 {
			return true
		}
		// B类内网
		if ip4[0] == 172 && ip4[1] >= 16 && ip4[1] <= 31 {
			return true
		}
		// C类内网
		if ip4[0] == 192 && ip4[1] == 168 {
			return true
		}
		return false
	}

	// IPv6
	if ip.IsPrivate() {
		return true
	}
	return false
}
